Skip to content

feat(settings): split default camera and microphone settings into separate toggles - #19034

Draft
max65482 wants to merge 2 commits into
nextcloud:mainfrom
max65482:feat/separate-audio-video-default-setting
Draft

feat(settings): split default camera and microphone settings into separate toggles#19034
max65482 wants to merge 2 commits into
nextcloud:mainfrom
max65482:feat/separate-audio-video-default-setting

Conversation

@max65482

@max65482 max65482 commented Aug 19, 2026

Copy link
Copy Markdown
Contributor

☑️ Resolves

AI (if applicable)

  • The content of this PR was partly or fully generated using AI (Github Copilot, GPT-5.6 Luna)

🖌️ UI Checklist

🖼️ Screenshots / Screencasts

🏚️ Before 🏡 After
before after

🚧 Tasks

  • ...

🏁 Checklist

  • 🌏 Tested with different browsers / clients:
    • Chromium (Chrome / Edge / Opera / Brave)
    • Firefox
    • Safari
    • Talk Desktop
    • Integrations with Files sidebar and other apps
    • Not risky to browser differences / client
  • 🖌️ Design was reviewed, approved or inspired by the design team
  • ⛑️ Tests are included or not possible
  • 📗 User documentation in https://github.com/nextcloud/documentation/tree/master/user_manual/talk has been updated or is not required

🛠️ API Checklist

🚧 Tasks

  • ...

🏁 Checklist

  • ⛑️ Tests (unit and/or integration) are included or not possible
  • 📘 API documentation in docs/ has been updated or is not required
  • 🔖 Capability is added or not needed

@max65482
max65482 force-pushed the feat/separate-audio-video-default-setting branch from 1b53244 to 8d37e88 Compare August 19, 2026 18:32
…les, Assisted-by: Copilot:gpt-5.6-luna

Signed-off-by: Maximilian Martin <maximilian_martin@gmx.de>
@max65482
max65482 force-pushed the feat/separate-audio-video-default-setting branch from 8d37e88 to 8bffb12 Compare August 19, 2026 18:36

@Antreesy Antreesy left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for the contribution!

Needs a backender to review it before continue.

From a quick glance - we can't just drop a config option from v20.1, it needs to be deprecated as minimum; existing values set on server can be migrated to maintain behaviour (previous: true -> audio: true + video: true), client should check if server supports new options, otherwise fall back to pre-existing one (e.g. if new client used with old server)

@max65482

Copy link
Copy Markdown
Contributor Author

Thanks for the hint! Added backward and forward compatibility.
(Marking as draft since I haven't fully tested it yet.)

@max65482
max65482 marked this pull request as draft August 20, 2026 18:47
@max65482
max65482 force-pushed the feat/separate-audio-video-default-setting branch 2 times, most recently from 50ee006 to b2fa3c8 Compare August 21, 2026 11:22
…luna

Signed-off-by: Maximilian Martin <maximilian_martin@gmx.de>
@max65482
max65482 force-pushed the feat/separate-audio-video-default-setting branch from b2fa3c8 to ad59add Compare August 21, 2026 12:09
@nickvergessen nickvergessen added this to the ☃️ Next Major (36) milestone Aug 28, 2026
@nickvergessen nickvergessen added enhancement feature: settings ⚙️ Settings and config related issues feature: api 🛠️ OCS API for conversations, chats and participants labels Aug 28, 2026
Comment thread lib/Config.php
}

$legacyAppSetting = $this->appConfig->getAppValue(self::CALLS_START_WITHOUT_MEDIA);
if ($legacyAppSetting !== '') {

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Use hasAppKey instead, then you can still use getAppValueBool?

Comment thread lib/Config.php
// If the legacy setting is not set, check the new settings for audio and video separately.
$audioAppSetting = $this->appConfig->getAppValue(self::CALLS_START_WITHOUT_AUDIO);
$videoAppSetting = $this->appConfig->getAppValue(self::CALLS_START_WITHOUT_VIDEO);
if ($audioAppSetting !== '' || $videoAppSetting !== '') {

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

same here

Comment on lines +796 to +797
* start-without-audio: bool,
* start-without-video: bool,

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Both should have docs.

@@ -793,6 +793,8 @@
* can-enable-sip: bool,
* // Whether calls start without media by default

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should mention the deprecation and what to check instead

Comment thread lib/ConfigLexicon.php
new Entry(Config::EXTERNAL_CALL_SERVICE_FRAME_ORIGINS, ValueType::ARRAY, [], definition: 'JSON array of scheme+host(+port) origins that may be loaded in the iframe.' . PHP_EOL . 'Added to `Content-Security-Policy: frame-src` and the `Permissions-Policy` for camera/microphone'),
new Entry(Config::EXTERNAL_CALL_SERVICE_IFRAME_FIELD, ValueType::STRING, '', definition: 'JSON field name in the external service response that contains the iframe URL'),
new Entry(Config::CALLS_START_WITHOUT_MEDIA, ValueType::BOOL, false, definition: 'Whether participants start with enabled or disabled audio and video by default'),
new Entry(Config::CALLS_START_WITHOUT_MEDIA, ValueType::BOOL, false, definition: 'Deprecated: whether participants start with audio and video disabled by default', deprecated: true),

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should mention what to check instead

public const BLUR_VIRTUAL_BACKGROUND = 'blur_virtual_background';
public const CALLS_START_WITHOUT_AUDIO = 'calls_start_without_audio';
public const CALLS_START_WITHOUT_VIDEO = 'calls_start_without_video';
/** @deprecated Kept as fallback for existing installations. */

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
/** @deprecated Kept as fallback for existing installations. */
#[\Deprecated(message: 'Check individual configs for audio and video instead', since: '26.0.0')]

$event->getConfigValue(),
));
if ($event->isValid()) {
$this->synchronizeMediaPreferences($event->getUserId(), $event->getConfigKey(), $event->getConfigValue());

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this should happen in … oh there is no post-event

Comment thread docs/capabilities.md
* `email-csv-import` - Whether the endpoint to import a CSV email list as participants exists
* `config => chat => summary-threshold` (local) - Number of unread messages that should exist to show a "Generate summary" option
* `config => call => start-without-media` (local) - Boolean, whether media should be disabled when starting or joining a conversation
* `config => call => start-without-media` (local, deprecated) - Boolean, whether media should be disabled when starting or joining a conversation

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should mention what should be checked instead

@max65482

max65482 commented Aug 28, 2026

Copy link
Copy Markdown
Contributor Author

Thanks for your review @nickvergessen!
I reflected on this PR again and I'm not sure if that's really worth it. It would introduce a deprecated API setting and compatibility logic in client and server. By experience, compatibility code will be carried indefinitely.
A solution for the original goal - having separate camera and mic settings - is already there: The camera and mic settings from the last call are persisted in the browser storage.
What do you think?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement feature: api 🛠️ OCS API for conversations, chats and participants feature: settings ⚙️ Settings and config related issues

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Split default camera and microphone settings into separate toggles

3 participants